1)通过MDA表中的monDeviceIO和monIOQueue监测磁盘I/O性能

这两张表是MDA监测表中的一部分,它让你判断I/O是不是有问题,换句话说就是ASE在做大量I/O的时候,主机操作系统是及时完成了呢,还是没有。这两张表里的信息告诉我们在一段时间内平均磁盘工作时间,哪些设备作了最多的I/O,因为主机不能及时处理而造成有多少I/O在队列中。一般认为,如果你的主机连接在SAN上,每次I/O超过10毫秒是很差的,9~5也是比较慢的,低于4就比较正常。如果你觉得I/O性能不可以接受,分散I/O到多个磁盘或LUN是一个不错的主意。你可以通过monOpenObjectActivity表中确定哪些对象是"热点",把它们从同一个磁盘中移走.

2)通过iostat和vmstat监测操作系统,看"热点"盘和MDA表是否一致

通过在操作系统层面对磁盘和I/O的监测,进一步确认MDA表里的值.

3)确认libaio库已经安装

libaio安装与否主要依赖Linux操作系统的发布时是否默认安装。这个库为ASE提供了异步I/O(其他的I/O方式还包括"标准UNIX同步I/O"和"UFS缓存I/O"),ASE 15要求必须安装这个库,如果没有ASE数据库将不能启动.

Linux的不同版本处理llibaio库的方式不同,需要查询相应的说明,确认是否已经安装了,以及如何获得和安装.

4)如果使用文件系统,请确认DSYNC没有打开

DSYNC的简单说是这样的,当你用disk init创建一个数据库设备,ASE将会同步写这个文件,这样可以确保数据是写成功而且可以恢复。在早期的版本里,ASE需要把它打开,如果把它关了,使用文件缓冲区,在写数据或恢复(recovery)的时候如果出现问题,系统就可能出错甚至ASE数据库崩溃.

如果你使用ASE 15或者更高的版本,你需要将DSYNC关闭,DIRECTIO打开。这样写盘就会用类似于裸分区的方式.

如果你使用裸分区,那么这两个参数默认都是关闭,而其一直要保持关闭.

5)检查挂接mount的选项

如果你使用的是文件系统设备,你需要检查mount的选项,确认是否存在瓶颈.

比如,默认的mount选项是ext3,但它的文件作为数据库设备时不能提供最好的性能;而"noatime,nodiratime,data=writeback"可以提高性能。XFS文件系统比ext3(或者ext2)的性能要好.

6)确认/etc/sysctl.conf设置正确

这个参数确定了操作系统的核心参数,在每次启动时生效(在运行时,可以通过"sysctl -p")。对于ASE的应用,建议设置下面两个关键参数:

kernel.shmmax 共享内存

fs.aio-max-nr 最大异步I/O